package vista.servlet;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import modelo.oad.util.CriteriosBusqueda;
import modelo.oad.util.ParBean;

import org.displaytag.tags.TableTagParameters;
import org.displaytag.util.ParamEncoder;

public abstract class BolsaServlet extends HttpServlet{

	
	private final static Integer NUM_MAX_REGISTROS_EXPORTAR = new Integer(1000);
	
	protected void getPaginacionOrdenacion(HttpServletRequest request,String nombreTabla, 
			CriteriosBusqueda criteriosBusqueda, List<ParBean> criteriosOrdenacion) {
		
		
		String ordenColumna = request.getParameter(new ParamEncoder(nombreTabla)
				.encodeParameterName(TableTagParameters.PARAMETER_SORT));
		
		String tipoOrden = request.getParameter(new ParamEncoder(nombreTabla)
				.encodeParameterName(TableTagParameters.PARAMETER_ORDER));
		
		if(ordenColumna!= null && tipoOrden!= null){
			if(criteriosOrdenacion == null)
				criteriosOrdenacion = new ArrayList<ParBean>();
			
			String orden ="DESC";
			if(tipoOrden.equals("2"))
				orden ="ASC";
			
			if(ordenColumna.indexOf("|")!= -1){
				StringTokenizer tokens = new StringTokenizer(ordenColumna,"|");
	    		while (tokens.hasMoreElements())
	    		{
	    			ordenColumna = tokens.nextToken();
	    			criteriosOrdenacion.add(0,new ParBean(ordenColumna,orden ));
	    		}
			}
			else
				criteriosOrdenacion.add(0,new ParBean(ordenColumna,orden ));
			
		}
		
		String tipoExportar = request.getParameter(new ParamEncoder(nombreTabla)
				.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE));
		
		
		String numeroPagina = request.getParameter(new ParamEncoder(nombreTabla)
				.encodeParameterName(TableTagParameters.PARAMETER_PAGE));
		
		if(tipoExportar!=null){
			criteriosBusqueda.setNumMaxRegistros(NUM_MAX_REGISTROS_EXPORTAR);
		}
		else if(numeroPagina!= null){
			criteriosBusqueda.setNumPaginacion(new Integer(numeroPagina));		
		}
		else{
			criteriosBusqueda.setNumPaginacion(new Integer(1));
		}		
	}
	
	protected void getPaginacionOrdenacion(HttpServletRequest request,String id, 
			CriteriosBusqueda criteriosBusqueda, List<ParBean> criteriosOrdenacion, HashMap hashCamposOrdenacionTablas) {
		
		String ordenColumna = request.getParameter(new ParamEncoder(id)
				.encodeParameterName(TableTagParameters.PARAMETER_SORT));
		
		String tipoOrden = request.getParameter(new ParamEncoder(id)
				.encodeParameterName(TableTagParameters.PARAMETER_ORDER));
		
		if(ordenColumna!= null && tipoOrden!= null){
			if(criteriosOrdenacion == null)
				criteriosOrdenacion = new ArrayList<ParBean>();
			
			String nombreColumna = ((List)hashCamposOrdenacionTablas.get(id)).get(Integer.parseInt(ordenColumna)).toString();
			
			String orden ="DESC";
			if(tipoOrden.equals("2"))
				orden ="ASC";
			criteriosOrdenacion.add(0,new ParBean(nombreColumna,orden ));
			
		}
		
		String tipoExportar = request.getParameter(new ParamEncoder(id)
				.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE));
		
		
		String numeroPagina = request.getParameter(new ParamEncoder(id)
				.encodeParameterName(TableTagParameters.PARAMETER_PAGE));
		
		if(tipoExportar!=null){
			criteriosBusqueda.setNumMaxRegistros(NUM_MAX_REGISTROS_EXPORTAR);
		}
		else if(numeroPagina!= null){
			criteriosBusqueda.setNumPaginacion(new Integer(numeroPagina));		
		}
		else{
			criteriosBusqueda.setNumPaginacion(new Integer(1));
		}
		
	}
	
}
